import os
import re
from docx import Document


def rename_and_modify_files(directory):
    # 定义正则表达式来匹配文件名
    pattern = re.compile(r'\【(KC\d{3}-\d{3}.*?)\】实施方案-(\d+)')

    for filename in os.listdir(directory):
        match = pattern.match(filename)
        if match:
            # 提取文件名中的信息
            title_part = match.group(1).replace(' ', '').replace('-','')
            page_id = match.group(2)

            # 构造新的文件名和标题
            new_filename = f"安全{title_part}实施方案.docx"
            new_title = f"安全{title_part}实施方案"

            # 构造要添加的内容
            new_content = f"官网文档：http://172.26.1.150/pages/viewpage.action?pageId={page_id}\n"

            # 打开原始文档
            doc_path = os.path.join(directory, filename)
            doc = Document(doc_path)

            # 在'二、实现方案'上面添加新内容
            # for para in doc.paragraphs:
                # if para.text.strip() == '二、实现方案':
                #     new_paragraph = doc.add_paragraph(new_content)
                #     # 将新段落插入到当前段落之前
                #     # for element in reversed(list(para.elements)):
                #     para._element.insert_before(new_paragraph._element)
                #     # 由于insert_before将新元素插入到指定元素之前，并且返回新插入的元素，
                #     # 我们需要将新段落的引用更新为刚刚插入的元素（它们实际上是相同的，但这样做是为了清晰）
                #     # 然而，在这种情况下，我们不需要更新引用，因为我们只插入了一个元素
                #     # 并且立即继续处理。但为了保持代码的通用性，这里保留了这部分逻辑。
                #     # 重要的是要知道，在插入之后，我们应该继续处理原始段落列表中的下一个元素，
                #     # 因为我们已经在当前位置插入了新内容。但由于我们使用了reversed列表，
                #     # 下一次循环迭代将自动处理前一个段落（在文档中的实际顺序中）。
                #     # 但由于我们的目标是在找到'二、实现方案'后立即插入，并且不修改其他段落，
                #     # 所以我们可以在这里安全地中断循环。
                #     break  # 找到并插入后中断循环
                # else:
                    # 如果没有找到'二、实现方案'，则添加到文档末尾（或者你可以选择其他位置）
                    # 注意：根据你的需求，你可能想要在这里抛出一个错误或警告，因为没有找到指定的段落。
            doc.add_paragraph(new_content)

            # 更新文档标题（注意：这里假设文档的标题是第一个段落，且没有复杂的格式）
            # 如果文档的标题不是第一个段落，或者格式更复杂，你需要相应地调整这部分代码。
            if doc.paragraphs[0].text.strip():  # 检查第一个段落是否有内容
                doc.paragraphs[0].text = new_title  # 更新标题

            # 保存修改后的文档到新文件名
            new_doc_path = os.path.join(directory, new_filename)
            doc.save(new_doc_path)

            # 重命名文件（由于我们已经将修改后的内容保存到了新文件，所以这里的重命名实际上是必要的）
            # os.rename(doc_path, new_doc_path.replace('.docx', '_old.docx'))  # 可选：将原始文件重命名为备份
            # 注意：上面的重命名语句是为了保留原始文件的备份。如果你不想保留备份，可以直接删除原始文件：
            # os.remove(doc_path)
            # 但请务必确保新文件是正确的，并且你已经做好了备份，以防万一。

            # 由于我们已经将新文件保存为所需的名称，并且（可选地）将原始文件重命名为备份，
            # 所以这里不需要再次将新文件名赋值给变量或进行其他操作。

            print(f"Renamed and modified: {filename} -> {new_filename}")
        else:
            print(f"Skipped: {filename} (does not match the pattern)")


# 指定要处理的目录
directory_to_process = '.'  # 替换为你的目录路径
rename_and_modify_files(directory_to_process)
